package mylab.io.core.codec;

import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import mylab.base.foundation.lang.Identifiable;
import mylab.io.base.model.Msg;
import mylab.io.base.property.DasProperties;
import mylab.io.core.context.CoreContext;

/**
 * 通讯编码解码器集成装置
 * <p>
 * 基于 netty 职责链模式，集成管理各级 handler
 * </p>
 */
public interface Codec<P extends DasProperties, M extends Msg, F> extends Identifiable<String> {

    /**
     * Das上下文对象
     */
    CoreContext<P, M> getContext();


    ChannelInitializer<Channel> getChannelInitializer();

    /**
     * 初始化通讯链路
     */
    void initPipeLine(Channel channel) throws Exception;

    /**
     * 通讯协议解析器
     */
    MsgResolver<M, F> getResolver();
}
